<?php
declare (strict_types = 1);

namespace app\common\model\Post;

use app\common\model\Config;
use app\common\model\Post\Comment;
use think\Model;
use think\model\concern\SoftDelete;


/**
 * @mixin \think\Model
 */
class Post extends Model
{
    // 指定的数据表
    protected $table = 'pre_post';

    // 自动写入时间
    protected $autoWriteTimestamp = true;

    // 创建时间
    protected $createTime = 'createtime';

    // 更新时间
    protected $updateTime = false;

    // 软删除
    use SoftDelete;
    protected $deleteTime = 'deletetime';

    //每次查询的时候，追加一个自定义字段
    protected $append = [
        'comment_total',
        'visit_total',
        'state_text'
    ];

    //帖子的状态 // 模型定义方法
    public function state()
    {
        // 查询相应积分
        // 置顶
        $PostState1 = Config::where(['key' => 'PostState1'])->value('value');

        // 精华
        $PostState2 = Config::where(['key' => 'PostState2'])->value('value');

        // 热门
        $PostState3 = Config::where(['key' => 'PostState3'])->value('value');

        return [
           0 => '常规', 1 => "置顶({$PostState1}积分)", 2 => "精华({$PostState2}积分)", 3 => "热门({$PostState3}积分)"
        ];
    }

    //关联查询
    public function user()
    {
        //belongsTo 关联查询
        // belongsTo('关联模型名','外键名','关联表主键名');
        return $this->belongsTo('app\common\model\User\User', 'userid', 'id');
    }

    //关联查询
    public function cate()
    {
        return $this->belongsTo('app\common\model\Post\Cate', 'cateid', 'id');
    }

    //定义一个获取器 comment_total  获取器是自动调用的
    public function getCommentTotalAttr($value, $data)
    {
        //查询出，每条帖子的评论总数
        $postid = $data['id'];

        $count = Comment::where(['postid' => $postid])->count();

        return $count ? $count : 0;
    }

    // 定义一个获取器 用于统计访问总数 visit_total
    public function getVisitTotalAttr($value, $data)
    {
        // 获取访问字段
        $visit = $data['visit'];
        
        // 字符串转成数组
        $visit = empty($visit) ? [] : explode(',', $visit);

        // 返回数组的统计总数
        return count($visit);
    }

    public function getStateTextAttr($value,$data)
    {
        $stateList = [0 => '常规', 1 => "置顶", 2 => "精华", 3 => "热门"];

        return $stateList[$data['state']];
    }
}
